package CapaLogica;

import datechooser.beans.DateChooserCombo;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.swing.*;
import CapaGrafica.*;
import CapaDatos.*;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import ve.edu.ucab.cliente.ClienteSocket;


/**
 *
 * @author Usuario
 */

public class ComunicaCliente {
  private static Cliente elCliente = new Cliente();

 /**
 *
 * @return los datos del cliente
 */
    public Cliente getElCliente() {
        return elCliente;
    }
/**
 *
 * @param elCliente
 */
    public void setElCliente(Cliente elCliente) {
        ComunicaCliente.elCliente = elCliente;
    }

 /**
     * firma para registrar a una persona la sistema
     * @param jTFID ID del usuario
     * @param jTFNombre nombre del usuario
     * @param jTFApellido apellido del usuario
     * @param jTFCedula cedula del cliente
     * @param jTFNacionalidad nacionalidad del cliente
     * @param jTFTelefono telefono del cliente
     * @param jPFPassword contraseña del cliente
     * @param jPFPassword2 segunda contraseña, confirma la contraseña
     * @param jCBSexo sexo del cliente
     * @param fecha fecha de nacimiento del cliente
     * @param jCBEdoCivil esto civil del cliente
     * @return booleano que indica si se pudo registrar el cliente
     */
  public boolean RegistrarCliente(JTextField jTFID,JTextField jTFNombre,JTextField jTFApellido,JTextField jTFCedula,JTextField jTFNacionalidad,JTextField jTFTelefono,JPasswordField jPFPassword,JPasswordField jPFPassword2,JComboBox jCBSexo,DateChooserCombo fecha,JComboBox jCBEdoCivil)
{
   if(validarDatosCliente(jTFID, jTFNombre, jTFApellido, jTFCedula, jTFNacionalidad, jTFTelefono, jPFPassword, jPFPassword2, jCBSexo, fecha, jCBEdoCivil)==true && menor_edad (fecha)==true)
   {
       crearNodoCliente(jTFID, jTFNombre, jTFApellido, jTFCedula, jTFNacionalidad, jTFTelefono, jPFPassword, jPFPassword2, jCBSexo,fecha, jCBEdoCivil);
   return true;
   }
   else
       return false;
   }

  /**
     * firma para validar que el usuario halla introducido todos los datos
     * @param iD ID del usuario
     * @param nombre nombre del usuario
     * @param apellido apellido del usuario
     * @param cedula cedula del cliente
     * @param nacionalidad nacionalidad del cliente
     * @param telefono telefono del cliente
     * @param password contraseña del cliente
     * @param password2 segunda contraseña, confirma la contraseña
     * @param sexo sexo del cliente
     * @param fecha fecha de nacimiento del cliente
     * @param edoCivil esto civil del cliente
     * @return booleano que indica si todos los campos estan introducidos - s
     * @return i retorna
     *@return TRUE estan todos los campos introducidos, FALSE falta alguno por introducir
     */

   public boolean validarDatosCliente(JTextField id, JTextField nombre, JTextField apellido, JTextField cedula, JTextField nacionalidad, JTextField telefono, JPasswordField password, JPasswordField password2, JComboBox sexo, DateChooserCombo fecha, JComboBox edoCivil)
    {
      String crearPassword, confirmaPassword;
      int genero,EdoCivil;
       genero  =  sexo.getSelectedIndex();
       EdoCivil = edoCivil.getSelectedIndex();
      crearPassword= new String (password.getPassword());
      confirmaPassword= new String (password2.getPassword());

      if(id.getText().equals("") || nombre.getText().equals("") || apellido.getText().equals("") || cedula.getText().equals("") || nacionalidad.getText().equals("") || telefono.getText().equals("") || genero == 0 || fecha.getText().equals("") || EdoCivil == 0 || confirmaPassword.equals(crearPassword)==false)
          return false; // esto indica que el usuario olvidó colocar un dato en el registro
      else
          return true;  //el registro tiene todos sus datos.
    }
 /**
     * firma para crear al cliente con todos sus datos y mandarlo al servidor
     * por medio de la libreria JSockets
     * @param userName ID del usuario
     * @param nombre nombre del usuario
     * @param apellido apellido del usuario
     * @param cedula cedula del cliente
     * @param nacionalidad nacionalidad del cliente
     * @param telefono telefono del cliente
     * @param jPassword contraseña del cliente
     * @param jCPassword segunda contraseña, confirma la contraseña
     * @param jCBSexo sexo del cliente,
     * @param fecha fecha de nacimiento del cliente
     * @param jCBEdoCivil esto civil del cliente
     * @return booleano que indica si se pudo registrar el cliente
     */


    public void crearNodoCliente(JTextField userName, JTextField nombre, JTextField apellido, JTextField cedula, JTextField nacionalidad, JTextField telefono, JPasswordField jPassword, JPasswordField jCPassword, JComboBox sexo,DateChooserCombo fecha,JComboBox edoCivil )
    {
      String genero, Dia,Mes,Year,EdoCivil,tipoCliente, password, confirmaPassword,fecha3;
      fecha3=fecha.getText();
      genero  = (String) sexo.getSelectedItem();
      Dia="";
      Mes="";
      Year="";
      Dia=Dia+fecha3.charAt(0)+fecha3.charAt(1);
      Mes=Mes+fecha3.charAt(3)+fecha3.charAt(4);
      Year=Year+fecha3.charAt(6)+fecha3.charAt(7)+fecha3.charAt(8)+fecha3.charAt(9);
      EdoCivil = (String) edoCivil.getSelectedItem();
      tipoCliente = enviarTipoCliente(Year);
      password=new String (jPassword.getPassword());
      confirmaPassword= new String (jCPassword.getPassword());
      DireccionIP IP = new DireccionIP();
        try {
            IP.abrirArchivoTxt();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(ComunicaInvitado.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(ComunicaInvitado.class.getName()).log(Level.SEVERE, null, ex);
        }
      String ip = IP.getDireccionIp();
      Cliente clienteAux = new Cliente(nombre.getText(), apellido.getText() , cedula.getText() , nacionalidad.getText(), genero , Dia + "/"+ Mes + "/"+Year, EdoCivil, password , nacionalidad.getText(), userName.getText());
      setElCliente(clienteAux);
      elCliente.setTipoCliente(tipoCliente);
      //Se ejecuta la conexion con el servidor.
      ClienteSocket cliente = new ClienteSocket();
      String resultado = cliente.ejecutarPeticion("3:"+nombre.getText()+":"+apellido.getText()+":"+cedula.getText()+":"+genero+":"+Dia + "/"+ Mes + "/"+Year+":"+EdoCivil+":"+userName.getText()+":"+password+":"+nacionalidad.getText(),ip, 7687);
       if(resultado.equals("true"))
       {
          JOptionPane.showMessageDialog(null, "registro exitoso");
          ventanaMenu PantallaMenu = new ventanaMenu();
          PantallaMenu.setVisible(true);
          PantallaMenu.setNombre(elCliente.getNombre());
          PantallaMenu.setCedula(elCliente.getCedula());
          PantallaMenu.setApellido(elCliente.getApellido());
       }
       else
       {
           JOptionPane.showMessageDialog(null, "Este cliente ya se encuentra registrado");
       }
    }

   /**
    *
    * @param Year año en el que nacio el cliente
    * @return string, si es mayor de edad, menor de edad o regular
    */
     public String enviarTipoCliente(String Year){
        Calendar c = new GregorianCalendar();
        int edad = 0, annio;
        annio = c.get(Calendar.YEAR);
        edad = annio - Integer.parseInt(Year);

        if ((edad <= 60) && (edad >= 5))
            return "Regular";
        else if(edad > 60)
            return "Tercera Edad";
        else
            return "Menor De Edad";
     }
public Boolean validarDatosConsultaReserva (JTextField jTFConsultaCedula, JTextField jTFConsultaIdRes)
	  {
	      if (jTFConsultaCedula.getText().equals("") || jTFConsultaIdRes.getText().equals(""))
	          return false;
	      return true;	  }
     /**
      * firma para validar que un cliente sea mayor de edad
      * @param fecha la fecha de nacimiento del cliente
      * @return boolean, TRUE si es mayor de edad, FALSE no lo es
      */
     public boolean menor_edad (DateChooserCombo fecha)
     {
       Calendar c = new GregorianCalendar();
       String annio="",fecha3;
       int annio2;

       annio2 = c.get(Calendar.YEAR);
       fecha3=fecha.getText();
       annio=annio+fecha3.charAt(6)+fecha3.charAt(7)+fecha3.charAt(8)+fecha3.charAt(9);

       if (annio2-Integer.parseInt(annio)<18)
         return false;
       else
       return true;
     }
}

